package com.puge.exceptionhandle;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import com.puge.commonutils.R;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author by sun
 * @date 2021/6/4.15:41
 */
//编写该类是为了对，代码执行时出现异常，做出对应的提示
@ControllerAdvice
@Slf4j//表明当前类下需要用到日志
public class GlobalExceptionHandler {
    //指定出现什么异常执行这个方法
    @ExceptionHandler(Exception.class)//设置异常的超类，即所有出现异常的地方都会运行到这个方法
    @ResponseBody//返回数据
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常处理");
    }

//    特定异常处理
//指定出现什么异常执行这个方法
@ExceptionHandler(ArithmeticException.class)//设置异常的超类，即所有出现异常的地方都会运行到这个方法
@ResponseBody//返回数据
public R error(ArithmeticException e){
    e.printStackTrace();
    return R.error().message("执行了ArithmeticException异常处理");
    }

//    自定义异常处理
@ExceptionHandler(PuGeException.class)//设置异常的超类，即所有出现异常的地方都会运行到这个方法
@ResponseBody//返回数据
    public R error(PuGeException e){
        log.error(e.getMsg());//将异常信息通过日志的方式写入到error中
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }
}


